package org.example.demo1.controller;

import org.example.demo1.dto.LoginRequest;
import org.example.demo1.dto.Result;
import org.example.demo1.entity.User;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;

@RestController
@RequestMapping("/api/auth")
@CrossOrigin(origins = "*")
public class LoginController {

    // 使用内存存储模拟数据库
    private final ConcurrentHashMap<String, User> userDatabase = new ConcurrentHashMap<>();
    private final AtomicInteger idGenerator = new AtomicInteger(1);

    // 初始化一些测试用户
    public LoginController() {
        // 添加测试用户
        User testUser = new User(
                idGenerator.getAndIncrement(),
                "testuser",
                "测试用户",
                "生活不止眼前的苟且，还有诗和远方",
                "13800138000",
                "北京市朝阳区",
                "123456"
        );
        userDatabase.put(testUser.getUsername(), testUser);
        System.out.println("=== 初始化测试用户: testuser ===");
        System.out.println("=== 当前用户数量: " + userDatabase.size() + " ===");
    }

    /**
     * 用户登录接口 - 添加详细日志
     */
    @PostMapping("/login")
    public Result<User> login(@RequestBody LoginRequest loginRequest) {
        System.out.println("=== 收到登录请求 ===");
        System.out.println("请求数据: " + loginRequest);

        String username = loginRequest.getUsername();
        String password = loginRequest.getPassword();

        // 参数验证
        if (username == null || username.trim().isEmpty()) {
            System.out.println("登录失败: 用户名为空");
            return Result.error("用户名不能为空");
        }
        if (password == null || password.trim().isEmpty()) {
            System.out.println("登录失败: 密码为空");
            return Result.error("密码不能为空");
        }

        // 查找用户
        User user = userDatabase.get(username);
        if (user == null) {
            System.out.println("登录失败: 用户不存在 - " + username);
            System.out.println("当前存在的用户: " + userDatabase.keySet());
            return Result.error("用户不存在");
        }

        // 验证密码
        if (!user.getPassword().equals(password)) {
            System.out.println("登录失败: 密码错误");
            return Result.error("密码错误");
        }

        // 登录成功，返回用户信息（不包含密码）
        User responseUser = new User(
                user.getId(),
                user.getUsername(),
                user.getNickname(),
                user.getMotto(),
                user.getPhone(),
                user.getAddress(),
                null
        );

        System.out.println("登录成功: " + username);
        return Result.success("登录成功", responseUser);
    }

    /**
     * 用户注册接口 - 添加详细日志
     */
    @PostMapping("/register")
    public Result<User> register(@RequestBody User user) {
        System.out.println("=== 收到注册请求 ===");
        System.out.println("注册数据: " + user);

        // 参数验证
        if (user.getUsername() == null || user.getUsername().trim().isEmpty()) {
            return Result.error("用户名不能为空");
        }
        if (user.getPassword() == null || user.getPassword().trim().isEmpty()) {
            return Result.error("密码不能为空");
        }
        if (user.getNickname() == null || user.getNickname().trim().isEmpty()) {
            return Result.error("昵称不能为空");
        }

        // 检查用户名是否已存在
        if (userDatabase.containsKey(user.getUsername())) {
            System.out.println("注册失败: 用户名已存在 - " + user.getUsername());
            return Result.error("用户名已存在");
        }

        // 创建新用户
        User newUser = new User(
                idGenerator.getAndIncrement(),
                user.getUsername(),
                user.getNickname(),
                user.getMotto() != null ? user.getMotto() : "这个人很懒，什么都没有写～",
                user.getPhone(),
                user.getAddress(),
                user.getPassword()
        );

        // 保存用户
        userDatabase.put(newUser.getUsername(), newUser);

        // 返回注册成功的用户信息（不包含密码）
        User responseUser = new User(
                newUser.getId(),
                newUser.getUsername(),
                newUser.getNickname(),
                newUser.getMotto(),
                newUser.getPhone(),
                newUser.getAddress(),
                null
        );

        System.out.println("注册成功: " + user.getUsername());
        System.out.println("当前用户数量: " + userDatabase.size());
        return Result.success("注册成功", responseUser);
    }

    /**
     * 获取用户信息接口
     */
    @GetMapping("/user/{username}")
    public Result<User> getUserInfo(@PathVariable String username) {
        User user = userDatabase.get(username);
        if (user == null) {
            return Result.error("用户不存在");
        }

        // 返回用户信息（不包含密码）
        User responseUser = new User(
                user.getId(),
                user.getUsername(),
                user.getNickname(),
                user.getMotto(),
                user.getPhone(),
                user.getAddress(),
                null
        );

        return Result.success("获取成功", responseUser);
    }

    /**
     * 获取所有用户列表（仅用于测试）
     */
    @GetMapping("/users")
    public Result<List<User>> getAllUsers() {
        List<User> users = new ArrayList<>();
        for (User user : userDatabase.values()) {
            // 不返回密码
            users.add(new User(
                    user.getId(),
                    user.getUsername(),
                    user.getNickname(),
                    user.getMotto(),
                    user.getPhone(),
                    user.getAddress(),
                    null
            ));
        }
        return Result.success("获取成功", users);
    }

    /**
     * 调试接口 - 查看当前状态
     */
    @GetMapping("/debug")
    public Result<Object> debug() {
        java.util.Map<String, Object> debugInfo = new java.util.HashMap<>();
        debugInfo.put("timestamp", System.currentTimeMillis());
        debugInfo.put("userCount", userDatabase.size());
        debugInfo.put("users", userDatabase.keySet());
        debugInfo.put("nextId", idGenerator.get());
        return Result.success("调试信息", debugInfo);
    }

    /**
     * 健康检查接口
     */
    @GetMapping("/health")
    public Result<String> healthCheck() {
        return Result.success("认证服务运行正常", null);
    }

    /**
     * 测试接口
     */
    @GetMapping("/test")
    public String test() {
        return "认证服务测试成功！时间：" + System.currentTimeMillis();
    }

    /**
     * 简化登录测试接口 - 用于调试
     */
    @PostMapping("/login-test")
    public Result<Object> loginTest(@RequestBody java.util.Map<String, String> request) {
        System.out.println("=== 简化登录测试请求 ===");
        System.out.println("请求数据: " + request);

        String username = request.get("username");
        String password = request.get("password");

        if (username == null || password == null) {
            return Result.error("用户名或密码不能为空");
        }

        User user = userDatabase.get(username);
        if (user == null) {
            return Result.error("用户不存在");
        }

        if (!user.getPassword().equals(password)) {
            return Result.error("密码错误");
        }

        java.util.Map<String, Object> userInfo = new java.util.HashMap<>();
        userInfo.put("id", user.getId());
        userInfo.put("username", user.getUsername());
        userInfo.put("nickname", user.getNickname());
        userInfo.put("motto", user.getMotto());
        userInfo.put("phone", user.getPhone());
        userInfo.put("address", user.getAddress());

        return Result.success("登录成功", userInfo);
    }
}